/*
Radio.java
Autor: Paola Garcia, carnet 10205
Fecha: 08 julio 2011
Descripcion: implementa los metodos de NuestraInterfaz, el cual se encarga de realizar las
tareas basicas del radio. Incluye programacion defensiva.
*/
 
public class Radio implements NuestraInterfaz{

	//Declaracion de atributos.
	private double[] botones;
	boolean onOf, amFm;
	double emisora, otro;
	String dato;
	
	//constructor
	//Se establecen valores iniciales
	public Radio(){
		botones = new double[12];
		if(amFm) //AM
			emisora = 1610;
		else //FM
			emisora = 107.9;
	}

	//Encender o apagar el radio
	public boolean power(){
		if(onOf){ //cambiar de encendido a apagado con onOf
			onOf = false;
		}
		else{
			onOf = true;			
		}
		return onOf;
	}
	
	//Cambiar de AM a FM
	public boolean cambio(){
		if(onOf){
			if(amFm){ //cambiar de AM a FM con amFm
				amFm = false; //FM
				emisora = 107.9;
				//System.out.println("\n Actualmente en emisora: " + emisora + "\n"); //Mostrar en la emisora que se encuentra
			}
			else{
				amFm = true; //AM
				emisora = 1610;
				//System.out.println("\n Actualmente en emisora: " + emisora + "\n");
			}
		}
		else
			System.out.println("\n El radio se encuentra apagado \n");
		return amFm;
	}
	
	//Avanzar hacia adelante dependiendo si es AM o FM
	public void fw(){
		if(onOf){
			if(amFm){ //AM
				if(emisora >= 1610) //Si llega al tope, empieza de nuevo
					emisora = 530;
				else
					emisora = emisora + 10; //Va aumentando las emisoras
			//System.out.println("\n Actualmente en emisora: " + emisora + "\n");
			}
			else{ //FM
				otro = emisora*200; //Para reducir los decimales
				emisora = otro/200;
				if(emisora >= 107.9){ //Si llega al tope, empieza de nuevo
					emisora = 87.9;
				}
				else
					emisora = emisora + 0.2; //Va aumentando las emisoras
			//System.out.println("\n Actualmente en emisora: " + emisora + "\n");
			}
		}
		else
			System.out.println("\n El radio se encuentra apagado \n");
	}
	
	//Avanza hacia atras dependiendo si es AM o FM
	public void bw(){
		if(onOf){
				if(amFm){ //AM
					if(emisora <= 530) //Si llega al inicio, se va al final
						emisora = 1610;
					else
						emisora = emisora - 10; //Va restando las emisoras
				//System.out.println("\n Actualmente en emisora: " + emisora + "\n");
				}
				else{ //FM
					otro = emisora*200; //Para reducir los decimales
					emisora = otro/200;
					if(emisora <= 87.9) //Si llega al inicio, se va al final
						emisora = 107.9;
					else
						emisora = emisora - 0.2; //Va restando las emisoras
				//System.out.println("\n Actualmente en emisora: " + emisora + "\n");
				}
			}
			else
				System.out.println("\n El radio se encuentra apagado \n");
	}
	
	//Guardar en el boton el numero de emisora
	public void store(int boton){
		if(onOf){
			if(boton <=12 && boton >= 1){ //Verificar que se encuentre dentro del rango
				boton = boton - 1; //Para entrar a la posicion correcta en el vector
				if(botones[boton] == 0){ //Revisar si esta ocupado o no
					botones[boton] = emisora; //Guarda la emisora en el boton indicado por el usuario
					System.out.println("\n Emisora guardada \n");
				}
				else{
					System.out.println("\n El boton ya tenia una emisora guardada.\n");
					System.out.println("\n REESCRIBIENDO \n");
					botones[boton] = emisora; //Guarda la emisora en el boton indicado por el usuario
				}	
			}
		}
		else
			System.out.println("\n El radio se encuentra apagado \n");
	}
	
	//Muestra la emisora guardada en su boton respectivo
	public void select(int boton){
		if(onOf){
			if(boton <= 12 && boton >= 1){//Verificar que se encuentre dentro del rango
				boton = boton - 1;
				if(botones[boton] == 0) //Revisar si ya contiene alguna emisora guardada
					System.out.println("\n No hay emisora guardada aun. \n");
				else{
					System.out.println(" \n Redireccionando a la emisora: " + botones[boton] + "\n");
					emisora = botones[boton]; //Para guardar el valor que contiene dicho boton
						if(emisora >= 530 && emisora <= 1610){ //si se encuentra en ese rango esta en AM
							amFm = true;
							dato = "AM";
						}
						else{ //sino esta en FM
							amFm = false;
							dato = "FM";
						}
					System.out.println(" \n Encontrado en: " + dato + "\n");
				}	
			}
		}
		else
			System.out.println("\n El radio se encuentra apagado \n");
	}
	
	//Metodo salir
	public void salir(){
		System.exit(0);
	}
	
	//Metodo toString
	public String toString(){
		String datos = "";
		if(onOf)
			datos += "\n El radio se encuentra encendido \n";
		else
			datos += "\n El radio se encuentra apagado \n";
		if(amFm){
			datos += "\n Actualmente en AM \n";
			datos += "\n En la emisora: " + emisora + "\n";
		}
		else{
			datos += "\n Actualmente en FM \n";
			datos += "\n En la emisora: " + emisora + "\n";
		}
		return datos;
	}
}